今天我們要建置 Simple Linear Regression 模型,使用模型訓練並預測,我們實作的方式分兩種 : (1) scikit-learn 、(2) Keras
包含許多機器學習、資料探勘演算法的軟件包,其中我們會使用裡面的 Linear Regression 函式庫去實踐,程式碼如下 :
from sklearn.linear_model import LinearRegression
import numpy as np
# x:自變數, y:因變數
x = np.array([1,2,3,4,5]).reshape(5,1)
y = np.array([2,4,6,8,10])
model=LinearRegression()
model.fit(x,y)
print('bias:',model.intercept_)
print('slope:',model.coef_)
深度學習神經網路套件,底層為Tensorflow,設計以更簡單、模組化的方式來建置模型。
我們使用梯度下降(Gradient Descent) 中的 隨機梯度下降(Stochastic Gradient Descent) ,找出誤差函數的最小值。
程式碼如下 :
from keras.models import Sequential
from keras.layers import Dense
x = np.linspace(1,1000,100).reshape(-1,1) # 隨機產生排序好的資料
y = crtCDF(x)
x = preprocessing.scale(x) # 標準化: 零均值化
model = Sequential()
model.add(Dense(1, input_dim=1, activation="linear")) # 簡單線性
sgd=keras.optimizers.SGD(lr=0.01) # 激勵函數: SGD
model.compile(loss="mse", optimizer=sgd, metrics=["mse"])
model.fit(x, y, epochs=100, batch_size=32, verbose=0)
pred_y = model.predict(x)
Model寫完了,CDF函數有了,我將這兩個結合在一起就可以變成 最初始的Learned Index 拉!
分別測試兩種方法,將訓練完的結果與原本的 CDF 分布進行比較。
程式碼付這 Code
下面兩張圖可以瞭解,其實兩個方法的擬合結果差不多 :
目前只有單純使用單一個Model來預測資料位置,未加上Biased Binary Search 查詢策略,因為我們現在只需看 Model 擬合 CDF 資料的分布狀況。
除了可以使用線性回歸預測資料位置之外,我們還可以使用神經網路(NN),明天來簡單地介紹 NNㄅ !